package com.aaa.common.util;

import com.aaa.common.constant.ConstantUtil;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teaopenapi.models.Config;

import java.util.Random;
/**
 * @FileName: SmsUtil
 * @Description: 短信SMS封装工具类
 * @Author: zhz
 * @CreateTime: 2025/9/23 14:51
 * @Version: 1.0.0
 */
public class SmsUtil {
    /**
     * 创建短信客户端
     * @return
     * @throws Exception
     */
    public static Client createClient() throws Exception {
        Config config = new Config()
                // 配置 AccessKey ID，请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(ConstantUtil.SMS.ACCESS_KEY_ID)
                // 配置 AccessKey Secret，请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(ConstantUtil.SMS.ACCESS_KEY_SECRET);

        // 配置 Endpoint
        config.endpoint = "dysmsapi.aliyuncs.com";

        return new Client(config);
    }

    /**
     *发送短信
     * @param phoneNum 电话号码  可以使用逗号隔开 ，最多1000个
     * @param verifyCode  验证码
     * @return 正确返回1  错误返回0
     */
    public static int sendSms(String phoneNum, String verifyCode)  {
        try {
            // 初始化请求客户端
            Client client = SmsUtil.createClient();

            // 构造请求对象，请填入请求参数值
            SendSmsRequest sendSmsRequest = new SendSmsRequest()
                    .setPhoneNumbers(phoneNum)
                    .setSignName(ConstantUtil.SMS.SIGN_NAME) //签名
                    .setTemplateCode( ConstantUtil.SMS.TEMPLATE_CODE) //模版
                    .setTemplateParam("{\"code\":\""+verifyCode+"\"}"); //设置模版参数

            // 获取响应对象
            SendSmsResponse sendSmsResponse = client.sendSms(sendSmsRequest);

            // 响应包含服务端响应的 body 和 headers
            return sendSmsResponse.getStatusCode()==200?sendSmsResponse.getBody().getCode().equals("OK")?1:0:0;
        } catch (Exception e) {
            System.err.println("短信发送异常：" + e.getMessage());
            e.printStackTrace();
        }
        return 0;
    }

    /**
     * 生成验证码
     * @return
     */
    public static  String generateVerifyCode(){
        Random random = new Random();
        //random.nextInt(900000)=[0,899999]  random.nextInt(900000)+100000=[100000,999999]
        return  (random.nextInt(900000)+100000)+"";
    }

    public static void main(String[] args) throws Exception {

        System.out.println(sendSms("15238965436", generateVerifyCode())>0?"发送成功":"发送失败");

    }
}
